package com.zyj.guava.partition;

import com.google.common.collect.Lists;

import java.util.ArrayList;
import java.util.List;

/**
 * 假设现在你的任务是给100w个用户发送消息
 */
public class Sample2 {
    public static void main(String[] args) {
        long startTime = System.currentTimeMillis();
        //1. 获取所有需要接收消息的用户
        List<Long> userIds = Ids.getUserIds();

        //这里使用了partition操作
        //将一个大的list, 分割, 每一块100个元素
        //然后分批进行处理
        Lists.partition(userIds, 100).forEach(partUserIds -> {
            //这里的代码跟Sample1, 完全一样
            //2. 根据用户id, 构造消息体
            List<Operation.Msg> msgList = new ArrayList<>();
            for (Long userId : partUserIds) {
                msgList.add(Operation.buildMsg(userId));
            }
            //3. 发送消息
            Operation.sendMsg(msgList);
        });
        long endTime = System.currentTimeMillis();
        System.out.println("consume time = " + (endTime - startTime));

    }
}
